package com.kexio.file.vo;

import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;

/**
 * 文件版本 - 视图对象
 * 
 * @author Kexio Team
 * @since 1.0.0
 * @description 用于接口返回脱敏/展示友好的字段
 */
public class FileVersionVO {
    
    /** 版本ID */
    private String id;
    
    /** 文件ID */
    private String fileId;
    
    /** 存储对象ID */
    private String storageObjectId;
    
    /** 版本号 */
    private Integer versionNumber;
    
    /** 版本名称 */
    private String versionName;
    
    /** 版本显示名称 */
    private String versionDisplayName;
    
    /** 是否为当前版本 */
    private Boolean isCurrent;
    
    /** 文件名称 */
    private String fileName;
    
    /** 文件大小（字节） */
    private Long fileSize;
    
    /** 文件大小（人类可读格式） */
    private String humanReadableSize;
    
    /** MIME类型 */
    private String mimeType;
    
    /** 文件内容MD5哈希值 */
    private String contentMd5;
    
    /** 文件内容SHA256哈希值 */
    private String contentSha256;
    
    /** 版本状态 */
    private Integer status;
    
    /** 版本状态文本 */
    private String statusText;
    
    /** 版本创建者ID */
    private String creatorId;
    
    /** 版本创建者名称 */
    private String creatorName;
    
    /** 版本创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createVersionTime;
    
    /** 版本变更说明 */
    private String changeLog;
    
    /** 版本标签 */
    private String versionTags;
    
    /** 与上一版本的差异信息 */
    private String diffInfo;
    
    /** 是否为第一个版本 */
    private Boolean firstVersion;
    
    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    // ==================== Getter/Setter ====================
    
    public String getId() { return this.id; }
    public void setId(String id) { this.id = id; }
    
    public String getFileId() { return this.fileId; }
    public void setFileId(String fileId) { this.fileId = fileId; }
    
    public String getStorageObjectId() { return this.storageObjectId; }
    public void setStorageObjectId(String storageObjectId) { this.storageObjectId = storageObjectId; }
    
    public Integer getVersionNumber() { return this.versionNumber; }
    public void setVersionNumber(Integer versionNumber) { this.versionNumber = versionNumber; }
    
    public String getVersionName() { return this.versionName; }
    public void setVersionName(String versionName) { this.versionName = versionName; }
    
    public String getVersionDisplayName() { return this.versionDisplayName; }
    public void setVersionDisplayName(String versionDisplayName) { this.versionDisplayName = versionDisplayName; }
    
    public Boolean getIsCurrent() { return this.isCurrent; }
    public void setIsCurrent(Boolean isCurrent) { this.isCurrent = isCurrent; }
    
    public String getFileName() { return this.fileName; }
    public void setFileName(String fileName) { this.fileName = fileName; }
    
    public Long getFileSize() { return this.fileSize; }
    public void setFileSize(Long fileSize) { this.fileSize = fileSize; }
    
    public String getHumanReadableSize() { return this.humanReadableSize; }
    public void setHumanReadableSize(String humanReadableSize) { this.humanReadableSize = humanReadableSize; }
    
    public String getMimeType() { return this.mimeType; }
    public void setMimeType(String mimeType) { this.mimeType = mimeType; }
    
    public String getContentMd5() { return this.contentMd5; }
    public void setContentMd5(String contentMd5) { this.contentMd5 = contentMd5; }
    
    public String getContentSha256() { return this.contentSha256; }
    public void setContentSha256(String contentSha256) { this.contentSha256 = contentSha256; }
    
    public Integer getStatus() { return this.status; }
    public void setStatus(Integer status) { this.status = status; }
    
    public String getStatusText() { return this.statusText; }
    public void setStatusText(String statusText) { this.statusText = statusText; }
    
    public String getCreatorId() { return this.creatorId; }
    public void setCreatorId(String creatorId) { this.creatorId = creatorId; }
    
    public String getCreatorName() { return this.creatorName; }
    public void setCreatorName(String creatorName) { this.creatorName = creatorName; }
    
    public LocalDateTime getCreateVersionTime() { return this.createVersionTime; }
    public void setCreateVersionTime(LocalDateTime createVersionTime) { this.createVersionTime = createVersionTime; }
    
    public String getChangeLog() { return this.changeLog; }
    public void setChangeLog(String changeLog) { this.changeLog = changeLog; }
    
    public String getVersionTags() { return this.versionTags; }
    public void setVersionTags(String versionTags) { this.versionTags = versionTags; }
    
    public String getDiffInfo() { return this.diffInfo; }
    public void setDiffInfo(String diffInfo) { this.diffInfo = diffInfo; }
    
    public Boolean getFirstVersion() { return this.firstVersion; }
    public void setFirstVersion(Boolean firstVersion) { this.firstVersion = firstVersion; }
    
    public LocalDateTime getCreateTime() { return this.createTime; }
    public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
    
    public LocalDateTime getUpdateTime() { return this.updateTime; }
    public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
}
